/*
jvm是如何加载java类的
	加载，链接，初始化
	基本类型是由虚拟机提前定义好的
	引用类型分类：
		类，接口，数组类，泛型参数（泛型类会在编译过程中被擦除）
	初始化：为标记为常量值的字段赋值，及执行 < clinit > 方法的过程。
	（什么是 < clinit >？
	如果直接赋值的静态字段被 final 所修饰，并且它的类型是基本类型或字符串时，那么该字段便会
被 Java 编译器标记成常量值（ConstantValue），其初始化直接由 Java 虚拟机完成。除此之外的
直接赋值操作，以及所有静态代码块中的代码，则会被 Java 编译器置于同一方法中，并把它命名为
<clinit>。
类初始化是线程安全的，并且仅被执行一次
）
	类初始化何时被触发：
		1.虚拟机启动时，初始化用户指定的主类
		2.遇到new命令时，初始化new对应的目标类
		3.遇到调用静态方法的类时，初始化静态方法所在的类
		4.遇到访问静态字段的指令时，初始化静态字段所在的类
		5.子类的初始化会触发父类的初始化
		6.如果一个接口定义了default方法，那么直接实现或者间接实现该接口的类的初始化，都会触发该接口的初始化
		7.使用反射api对某个类进行反射调用时，初始化这个类
		8.当初次调用MethodHandle 实例时，初始化该MethodHandle 指向的方法所在的类

*/